package 笔试2.b站2.three;

import org.junit.Test;
import org.w3c.dom.Node;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {

    @Test
    public void test() {
        int[] nums={1,0,1,1,1,1,0,0,1,1,1,1,0};
        int xzgs=2;
        List<int[]> xzList= new ArrayList<>();
        xzList.add(new int[]{3,2,2});
        xzList.add(new int[]{4,2,3});
        //
//        System.out.println(onegeshu(nums,3,6));

        List<Node> nodeList=new ArrayList<>();
        for(int[] a:xzList){
            Node node = new Node(a[0], a[1], a[2]);
            nodeList.add(node);
        }
//        System.out.println(1);

        //
        Collections.sort(nodeList, new Comparator<Node>() {
            @Override
            public int compare(Node o1, Node o2) {
                return o1.time-o2.time;
            }
        });
//        back(nums,nodeList,0);
        System.out.println(res);
        //
        int ci=0;

        int flag=0;
        int maxTime=0;
        for(int i=0;i<nodeList.size();i++){
            //
            if(flag==1)break;
            //
            int count=0;
            int cTime=nodeList.get(i).time,cLim=nodeList.get(i).limit,cStop=nodeList.get(i).stop;
            maxTime=Math.max(cTime,maxTime);
            for(int j=ci;j<ci+cTime && j<nums.length;j++){
                //
                count+=nums[j]==1?1:0;
                if(flag==0 && count==cLim){
                    flag=1;
                    res+=onegeshu(nums,ci,ci+cTime-1);
                    back(nums,nodeList,j+cLim+1);
                    break;
                }
            }
            //
        }
        if(ci+maxTime>=nums.length)return;
        if(ci+maxTime<nums.length) {
            ci=ci+maxTime;
            flag=0;
        }
        //
        System.out.println(res);
    }

    void back(int[] nums,List<Node> nodeList,int ci){
        if(ci>=nums.length)return;

        int flag=0;
        int maxTime=0;
        for(int i=0;i<nodeList.size();i++){
            //
            if(flag==1)break;
            //
            int count=0;
            int cTime=nodeList.get(i).time,cLim=nodeList.get(i).limit,cStop=nodeList.get(i).stop;
            maxTime=Math.max(cTime,maxTime);
            for(int j=ci;j<ci+cTime && j<nums.length;j++){
                //
                count+=nums[j]==1?1:0;
                if(flag==0 && count==cLim){
                    flag=1;
                    res+=onegeshu(nums,ci,ci+cTime-1);
                    back(nums,nodeList,j+cLim+1);
                    break;
                }
            }
            //
        }
        if(ci+maxTime>=nums.length)return;
        if(ci+maxTime<nums.length) back(nums,nodeList,ci+maxTime);
        //
    }

    int res=0;


    class Node{
        int time;
        int limit;
        int stop;
        Node(int a,int b,int c){
            time=a;
            limit=b;
            stop=c;
        }

    }
    int onegeshu(int[] nums,int s,int e){
        if(s>e)return 0;
        int gs=0;
        for(int i=s;i<=e && e<nums.length;i++){
            if(nums[i]==1)gs++;
        }
        return gs;
    }
}
